这题面,生动形象,饶有趣味,interesting!出题人呢?
传送门
题解
先把又臭又长的题面读两遍,然后很显然,保证自己不死和把大佬怼死是两个不同的环节,两个问题,分别解决,互不干扰(这话咋这么耳熟呢)。
设$F[i][j]$表示到了第$i$天,自己的自信值为$j$,最多可以多少天不刷水题。
那么就可以腾出$\max{i=1}^{n}{\max{j=0}^{mc}{F[i][j]}}$天来专门怼大佬。
注意不是$\max_{j=0}^{mc}{F[n][j]}$,可能还没到第$n$天就可以把大佬怼死,但是到了第$n$天不可能不被大佬怼死。
那么问题就转化为:给你$D$天,每天可以执行操作1、3、4或5,问你能不能把大佬的自信值怼到$0$?
注意是怼到$0$,不能单纯刷DP取最大值,那样可能把大佬的自信值怼到负,而且可以怼的自信值不一定连续。
设一种只用操作3、4、5的怼大佬方案为$(Hurt,Day)$表示用了$Day$天对大佬产生了$Hurt$点伤害,发现数据范围并不大,所以就可以用BFS把所有方案都列出来。至于到底有多少种方案,玄学,反正数组开大点就好了。$Hash$判重,直接调STL里的map的话时效会差一些。(但是我懒,所以调了map)
然后把所有怼大佬的方案按照伤害排序,用两个指针,一头一尾扫过去就好了,注意两个方案的伤害之和不能超过大佬的自信值,且剩下位怼完的自信值可以用剩余的天数通过操作1把大佬怼死就行了。
代码
稍微有点长QwQ
1 |
|